CREATE DATABASE vendasinfo;

\c vendasinfo

BEGIN;

CREATE TABLE clientes(
	cpf CHAR(11) PRIMARY KEY,
	nome VARCHAR(100) NOT NULL, 
	data_nasc DATE NOT NULL,
	sexo  CHAR(1) NOT NULL, 
	telefone VARCHAR(14),
	endereco VARCHAR(150) NOT NULL,
	cep VARCHAR(8) NOT NULL,
	email VARCHAR(50) UNIQUE NOT NULL, 
	senha VARCHAR(23) NOT NULL
);

CREATE TABLE categorias(
	codigo SERIAL PRIMARY KEY,
	nome VARCHAR(40) UNIQUE NOT NULL
);

CREATE TABLE produtos(
	codigo SERIAL PRIMARY KEY,
	nome VARCHAR(100) NOT NULL,
	fabricante VARCHAR(50),
	preco DECIMAL(7,2) NOT NULL,
	qtd_estoque INT NOT NULL,
	descricao TEXT,
	codigo_categoria INT,
	CONSTRAINT preco_produto CHECK(preco>0), 
	CONSTRAINT qtd_estoque_produto CHECK(qtd_estoque>=0),
	FOREIGN KEY (codigo_categoria) REFERENCES categorias(codigo)
);

CREATE TABLE pagamentos(
	codigo SERIAL PRIMARY KEY,
	forma VARCHAR(50)
);

CREATE TABLE pedidos(
	numero SERIAL PRIMARY KEY,
	cpf_cliente CHAR(11),
	codigo_pagamento INT NOT NULL,
	valor_total DECIMAL(9,2),
	aprovado BOOLEAN,
	CONSTRAINT valor_total_pedido CHECK(valor_total>0),
	FOREIGN KEY (cpf_cliente) REFERENCES clientes(cpf),
	FOREIGN KEY (codigo_pagamento) REFERENCES pagamentos(codigo)
);

CREATE TABLE itens_pedido(
	codigo_produto INT,
	numero_pedido INT,
	PRIMARY KEY(codigo_produto, numero_pedido),
	FOREIGN KEY (codigo_produto) REFERENCES produtos(codigo),
	FOREIGN KEY (numero_pedido) REFERENCES pedidos(numero)
);

COMMIT;
